prompt [住院]费用拆分业务过程 SP_ZY_FYJS00_FYCFJS
create or replace procedure SP_ZY_FYJS00_FYCFJS
(
PBRID00 in number ,--[1][入参]:BRID00
PZYID00 in number ,--[2][入参]:ZYID00
PZYH000 in varchar2 ,--[3][入参]:住院号
PJZDH00 in number ,--[4][入参]:结账单号
PCZY000 in number ,--[5][入参]:操作员编码
PCZYXM0 in varchar2 ,--[6][入参]:操作员姓名
PCZYKS0 in number ,--[7][入参]:操作员科室
PCZLX00 in varchar2 ,--[8][入参]:操作类型 1:出院结算 2:重新结算
PFYCFLX in varchar2 ,--[9][入参]:费用拆分类型 N:否 Y:婴儿拆分 M:医保项目拆分 8:医保跨年拆分
PTYPE00 in varchar2 ,--[10][入参]:类型 中途结算、医保病人年度结算
PQTCS00 in varchar2 ,--[11][入参]:其他参数(xml)
PHJJE00 in number ,--[12][入参]:合计金额
PCOMMIT in varchar2 ,--[13][入参]:是否提交事务 Y:是 N:否
PZXZT00 out varchar2 ,--[14][出参]:执行状态 0:失败 1:成功
PZFHJJE out number ,--[15][出参]:自费合计金额或上年度合计金额
PYBHJJE out number ,--[16][出参]:医保合计金额或下年度合计金额
PFKLSH0 out varchar2 ,--[17][出参]:分开结算流水号
PNDJSXX out varchar2 ,--[18][出参]年度结算返回信息=SF_ZY_SFQYYBKNDJS返回值
POUTSTR out varchar2 ,--[19][出参]备用出参xml格式输出
PERCODE out varchar2 ,--[20][出参]:错误编码
PERRMSG out varchar2 --[21][出参]:错误信息
)
as
-- MODIFICATION HISTORY
-- Person Date Comments
-- zhangyc 2020.12.28 created by ZYSF-20201229-004
-- zhangyc 2022.01.04 增加IC_YBBRLB.YBSDLB=2(不分开结算) 医保属地类别;0本地、1省内、2省外(未定义的都默认为本地0) by ZYSF-20220105-005
-- zhangyc 2022.01.05 增加drg相关信息判断
LS_COUNT0 number(12);
LS_CZRQ00 char(8);
LS_CZSJ00 char(8);
LS_YBBRLB BM_BRXXB0.YBBRLB%type; --医保病人类别
LS_YBLB00 BM_BRXXB0.YBLB00%type; --医保类别
LS_YBZXLB IC_YBBRLB.YBZXLB%type; --医保中心类别编码
LS_FBBH00 BM_BRXXB0.FBBH00%type; --病人费别
LS_CXLSH0 PAY_YJJ_MXCX.CXLSH0%type;
LS_DDLSH0 PAY_YJJ_MXCX.DDLSH0%type;
LS_JKFH00 varchar2(10); --是否启用 Y:启用 N:不启用
LS_YBNDCS varchar2(100); --年度结算参数
LS_NDCS00 varchar2(20); --年度结算启用参数
LS_NDCS01 varchar2(100); --年度结算启用分中心
LS_RYRQ00 ZY_BRXXB0.RYRQ00%type; --入院日期
LS_DBZBM0 ZY_BRXXB0.DBZBM0%type; --单病种编码
LS_RYLB00 ZY_BRXXB0.RYLB00%type; --入院类别
LS_SFJZFP ZY_BRXXB0.SFJZFP%type; --是否精准扶贫 Y:是 1:是
LS_BZBMLB ZY_BRXXB0.BZBMLB%type; --病种编码类别 0:单病种编码 1:精准扶贫编码 2:出院诊断
LS_YBMC00 IC_YBBRLB.YBMC00%type; --医保中心名称
LS_TSBZFL BM_TSBZB0.TSBZFL%type;--病种分类 0:特殊病种 1:生育病种 2:单病种
LS_DQRQ00 varchar2(8);--当前日期
LS_SNDRQ0 varchar2(8);--上年度日期
LS_SNDFY0 number(12,2);--上年度费用
LS_BNDRQ0 varchar2(8);--本年度日期
LS_BNDFY0 number(12,2);--本年度费用
LS_BQBM00 varchar2(20);--病情编码
LS_ID0000_SND BM_ZYCF00_TEMP00.ID0000%type; --上年度
LS_ID0000_BND BM_ZYCF00_TEMP00.ID0000%type; --本年度
LS_CZBZ00 varchar2(2);--操作标志 0:正常结算 1:中途结算 2:年度结算 3:逃跑结算 01:跨年上年度 02:跨年本年度
LS_SFLB00 varchar2(1);--收费类别0:项目 1:YF_ZYCFMX 2:YF_YZYPSQ 3:药品 S:跨年上年度 B:跨年本年度
LS_YBSDLB IC_YBBRLB.YBSDLB%type; --医保属地类别;0本地、1省内、2省外(未定义的都默认为本地0)
ZY_DRGLSH ZY_BRXXB0.DRGLSH%type;--drglsh:DRG分组流水号
ZY_DRG_CODE ZY_BRXXB0.DRG_CODE%type;--drg_code:DRG组编码
ZY_DRG_NAME ZY_BRXXB0.DRG_NAME%type;--drg_name:DRG组名称
ZY_BATCHNUM ZY_BRXXB0.BATCHNUM%type;--batchnum:批次号
ZY_DRGZFE ZY_BRXXB0.DRGZFE%type;--drgzfe:DRG付费标准
ZY_DRG_STATUS ZY_BRXXB0.DRG_STATUS%type; --DRG同步状态:(0:撤销病案,1:病案上传,2:撤销明细,3:上传明细,4:分组查询,5:项目结算)
ZY_JSBLLX ZY_BRXXB0.JSBLLX%type;--DRG结算病例类型(BM_YBSXZD.JKBM00=90 SXBM00=jsbllx)(1:按DRG结算 2:按项目结算 3:按床日结算 4:日间手术)
ZY_IN_DRG ZY_BRXXB0.IN_DRG%type;--DRG入组标识编码(BM_YBSXZD.JKBM00=90 SXBM00=in_drg)
begin
PZXZT00:='0';--输出:执行状态 0:失败 1:成功
LS_CZRQ00:=to_char(sysdate,'YYYYMMDD');
LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS');
PZFHJJE:=0;--输出:自费合计金额
PYBHJJE:=0;--输出:医保合计金额
PERCODE:='';--输出:错误编码
PERRMSG:='';--输出:错误信息
PFKLSH0:='FYCF'||to_char(sysdate,'YYYYMMDDHH24MISS')||PZYID00;
LS_CXLSH0:=PFKLSH0;
LS_DDLSH0:=PFKLSH0;
LS_DQRQ00:=to_char(sysdate,'YYYYMMDD');
LS_SNDFY0:=0;--上年度费用
LS_BNDFY0:=0;--本年度费用
LS_SNDRQ0:=to_number(substrb(LS_DQRQ00,1,4))-1||'1231';--上年度日期
LS_BNDRQ0:=LS_DQRQ00;--本年度日期
LS_JKFH00:='N';
PNDJSXX:='';--[出参]年度结算返回信息=SF_ZY_SFQYYBKNDJS返回值
begin
select A.YBBRLB,A.FBBH00,A.YBLB00,B.YBZXLB,C.RYRQ00,C.DBZBM0,C.RYLB00,C.SFJZFP,C.BZBMLB,nvl(B.YBSDLB,0) YBSDLB,
C.DRGLSH,C.DRG_CODE,C.DRG_NAME,C.BATCHNUM,C.DRGZFE,C.DRG_STATUS,C.JSBLLX,C.IN_DRG
into LS_YBBRLB,LS_FBBH00,LS_YBLB00,LS_YBZXLB,LS_RYRQ00,LS_DBZBM0,LS_RYLB00,LS_SFJZFP,LS_BZBMLB,LS_YBSDLB,
ZY_DRGLSH,ZY_DRG_CODE,ZY_DRG_NAME,ZY_BATCHNUM,ZY_DRGZFE,ZY_DRG_STATUS,ZY_JSBLLX,ZY_IN_DRG
from BM_BRXXB0 A,IC_YBBRLB B,ZY_BRXXB0 C
where A.FBBH00=B.FBBH00 and a.YBLB00=b.YBLB00 and A.BRID00=C.BRID00
and A.BRID00 = PBRID00 and C.ZYID00=PZYID00;
exception
when others then
LS_YBBRLB:='0';
LS_YBLB00:='0';
LS_YBZXLB:='0';
end;
if PFYCFLX='8' and nvl(PTYPE00,'出院结算') not in ('医保病人年度结算','中途结算','欠费出院登记') then --参考过程SF_ZY_SFQYYBKNDJS
--步骤1:获取参数值
--ZY_YBBRCYJSSFQYKNJSMS:住院医保病人出院结算是否启用跨年结算模式,0:不启用,2:医保都启用,1:选择启用,加分号后面带启用的医保中心,多个中心用逗号隔开,如(1;@,H,2)默认0
begin
select substrb(trim(VALUE0),1,100) into LS_YBNDCS from XT_XTCS00 where NAME00 in ('ZY_YBBRCYJSSFQYKNJSMS');
exception
when others then
LS_YBNDCS:='0';
end;
LS_NDCS00:=trim(substrb(LS_YBNDCS,1,1));--0:不启用,2:医保都启用,1:选择启用
LS_NDCS01:=trim(substrb(LS_YBNDCS,3,100));--多个中心
if LS_NDCS00 in ('2') then --2:医保都启用
LS_JKFH00:='Y'; --Y:拆分 N:不拆分
elsif LS_NDCS00 in ('1') then --1:选择启用
LS_JKFH00:='Y'; --Y:拆分 N:不拆分
else
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
--判断医保中心
if LS_NDCS00 in ('1') then --1:选择启用
if instrb(','||trim(LS_NDCS01)||',',','||trim(LS_YBZXLB)||',')>0 then
LS_JKFH00:='Y'; --Y:拆分 N:不拆分
else
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
end if;
--判断入院日期和当前日期 是同一年度,不处理--begin--
if substrb(LS_RYRQ00,1,4)=substrb(LS_DQRQ00,1,4) then
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
--判断入院日期和当前日期 是同一年度,不处理--End--
--2019.12.24 zhangyc 单病种 、生育类别(生育,生育实时刷卡住院) 不启用--begin--
--2022.01.04 IC_YBBRLB.YBSDLB=2(不分开结算) 医保属地类别;0本地、1省内、2省外(未定义的都默认为本地0)
if (LS_DBZBM0 is not null) or (LS_RYLB00 in ('生育','生育实时刷卡住院')) or (LS_YBSDLB in (2))then
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
--2019.12.24 zhangyc 单病种 、生育类别(生育,生育实时刷卡住院)不启用--End--
--2020.01.09
--福州市医保,扶贫病种编码,要求拆分(肺科医院)--begin--
if LS_BZBMLB='1' and LS_YBMC00 in ('福州市医保中心') then
LS_JKFH00:='Y'; --Y:拆分 N:不拆分
end if;
--福州市医保,扶贫病种编码,要求拆分(肺科医院)--end--
--病种分类 0:特殊病种 1:生育病种 2:单病种--begin--
LS_BQBM00:=substrb(SF_SF_GETXMLNOTE('BQBM00',PQTCS00),1,20);
if trim(LS_BQBM00) is not null then
begin
select TSBZFL into LS_TSBZFL from BM_TSBZB0 where trim(BH0000)=trim(LS_BQBM00) and YBZXLB=LS_YBZXLB;
exception
when others then
LS_TSBZFL:='';
end;
--1:生育病种 2:单病种 不拆分--begin--
if LS_TSBZFL in ('1','2') then
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
--1:生育病种 2:单病种 不拆分--end--
end if;
--病种分类 0:特殊病种 1:生育病种 2:单病种--end--
--2023.01.05 jsbllx:1:按DRG结算 2:按项目结算 3:按床日结算 4:日间手术
if ZY_JSBLLX is not null and ZY_JSBLLX not in ('2') then
LS_JKFH00:='N'; --Y:拆分 N:不拆分
end if;
--步骤3:判断上年度是否有没有费用
if LS_JKFH00='Y' then
--上年度费用
select SQ_ZY_TEMP00_ID0000.nextval into LS_ID0000_SND from dual;
LS_CZBZ00:='01';--操作标志 0:正常结算 1:中途结算 2:年度结算 3:逃跑结算 01:跨年上年度 02:跨年本年度
LS_SFLB00:='S';--收费类别0:项目 1:YF_ZYCFMX 2:YF_YZYPSQ 3:药品 S:跨年上年度 B:跨年本年度
insert into ZY_JSBCMX(ZYID00,ID0000,MXID00,SFLB00,XMBH00,JZDH00,DJH000,XMDJ00,
XMSL00,HJJE00,CZRQ00,CZSJ00,CZY000,CZBZ00,FZDDH0,BZ0000)
select PZYID00,LS_ID0000_SND,0,LS_SFLB00,0,PJZDH00,A.DJH000,a.HJJE00,
1,a.HJJE00,LS_CZRQ00,LS_CZSJ00,PCZY000,LS_CZBZ00,substrb(LS_DDLSH0,1,30),'FYCF_SND'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and CZRQ00<=LS_SNDRQ0
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
;
--冲销的单据号
insert into ZY_JSBCMX(ZYID00,ID0000,MXID00,SFLB00,XMBH00,JZDH00,DJH000,XMDJ00,
XMSL00,HJJE00,CZRQ00,CZSJ00,CZY000,CZBZ00,FZDDH0,BZ0000)
select PZYID00,LS_ID0000_SND,0,LS_SFLB00,0,PJZDH00,A.DJH000,a.HJJE00,
1,a.HJJE00,LS_CZRQ00,LS_CZSJ00,PCZY000,LS_CZBZ00,substrb(LS_DDLSH0,1,30),'FYCF_SND'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and a.CXDJH0<>0
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
and a.CXDJH0 in (select bb.DJH000 from ZY_JSBCMX bb where bb.ZYID00=PZYID00 and bb.ID0000=LS_ID0000_SND and bb.CZBZ00='01' )
and a.DJH000 not in (select bb.DJH000 from ZY_JSBCMX bb where bb.ZYID00=PZYID00 and bb.ID0000=LS_ID0000_SND and bb.CZBZ00='01')
;
begin
select sum(HJJE00) into LS_SNDFY0 from ZY_JSBCMX
where 1=1
and ZYID00=PZYID00
and ID0000=LS_ID0000_SND
and CZBZ00='01'
;
exception
when others then
LS_SNDFY0:=0;
end;
--本年度费用
select SQ_ZY_TEMP00_ID0000.nextval into LS_ID0000_BND from dual;
LS_CZBZ00:='02';--操作标志 0:正常结算 1:中途结算 2:年度结算 3:逃跑结算 01:跨年上年度 02:跨年本年度
LS_SFLB00:='B';--收费类别0:项目 1:YF_ZYCFMX 2:YF_YZYPSQ 3:药品 S:跨年上年度 B:跨年本年度
insert into ZY_JSBCMX(ZYID00,ID0000,MXID00,SFLB00,XMBH00,JZDH00,DJH000,XMDJ00,
XMSL00,HJJE00,CZRQ00,CZSJ00,CZY000,CZBZ00,FZDDH0,BZ0000)
select PZYID00,LS_ID0000_BND,0,LS_SFLB00,0,PJZDH00,A.DJH000,a.HJJE00,
1,a.HJJE00,LS_CZRQ00,LS_CZSJ00,PCZY000,LS_CZBZ00,substrb(LS_DDLSH0,1,30),'FYCF_BND'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
and a.DJH000 not in (select bb.DJH000 from ZY_JSBCMX bb where bb.ZYID00=PZYID00 and bb.ID0000=LS_ID0000_SND and bb.CZBZ00='01') ;
begin
select sum(HJJE00) into LS_BNDFY0 from ZY_JSBCMX
where 1=1
and ZYID00=PZYID00
and ID0000=LS_ID0000_BND
and CZBZ00='02'
;
exception
when others then
LS_BNDFY0:=0;
end;
--如果上年度无费用直接返回N
if nvl(LS_SNDFY0,0)<=0 then
LS_JKFH00:='N';
end if;
--如果本年度无费用直接返回N
if nvl(LS_BNDFY0,0)<=0 then
LS_JKFH00:='N';
end if;
POUTSTR:=''||LS_ID0000_SND||''||''||LS_ID0000_BND||'';--[19][出参]备用出参xml格式输出
PZFHJJE:=nvl(LS_SNDFY0,0);--[15][出参]:自费合计金额或上年度合计金额
PYBHJJE:=nvl(LS_BNDFY0,0);--[16][出参]:医保合计金额或下年度合计金额
--PNDJSXX out varchar2 ,--[18][出参]年度结算返回信息=SF_ZY_SFQYYBKNDJS返回值
--第一位:是否启用Y:启用 N:不启用
--第二位: 上年度截止日期,费用
--第三位: 本年度截止日期,费用
PNDJSXX:=LS_JKFH00||'|';
PNDJSXX:=PNDJSXX||LS_RYRQ00||','||LS_SNDRQ0||','||nvl(LS_SNDFY0,0);
PNDJSXX:=PNDJSXX||'|';
PNDJSXX:=PNDJSXX||substrb(LS_DQRQ00,1,4)||'0101'||','||LS_BNDRQ0||','||nvl(LS_BNDFY0,0);
end if;
--1:医保跨年拆分--end
elsif PFYCFLX='Y' then
--1:出院结算 Y:婴儿拆分---begin---
--把数据插入到中间表-->婴儿费用
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_CXLSH0,LS_DDLSH0,a.DJH000,a.HJJE00,a.BRID00,0,'','N'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and a.YEXM00 is not null
and a.yexm00 not in ('全部')
and nvl(trim(a.YBFSDH),'0')='0'
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
;
--冲销的单据号
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_CXLSH0,LS_DDLSH0,a.DJH000,a.HJJE00,a.BRID00,0,'','N'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and a.CXDJH0<>0
and a.CXDJH0 in (select bb.DJH000 from PAY_YJJ_MXCX bb where bb.BRID00=PBRID00 and bb.CXLSH0=LS_CXLSH0 and bb.DDLSH0=LS_DDLSH0 and bb.STATE='N' )
and a.DJH000 not in (select bb.DJH000 from PAY_YJJ_MXCX bb where bb.BRID00=PBRID00 and bb.CXLSH0=LS_CXLSH0 and bb.DDLSH0=LS_DDLSH0 and bb.STATE='N')
;
--查询数据婴儿自费金额
begin
select sum(AMOUNT) into PZFHJJE from PAY_YJJ_MXCX where BRID00=PBRID00 and CXLSH0=LS_CXLSH0 and DDLSH0=LS_DDLSH0 and STATE='N';
exception
when others then
PZFHJJE:=0;
end;
if nvl(PZFHJJE,0)<=0 then
PZFHJJE:=0;
PFKLSH0:='';
return;
end if;
--把数据插入到中间表-->非婴儿费用
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_DDLSH0,LS_DDLSH0,a.DJH000,a.HJJE00,a.BRID00,0,'','Y'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00 and a.BRID00=PBRID00
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
and
(
( nvl(PZFHJJE,0)>0 and not exists (select 1 from PAY_YJJ_MXCX aa where aa.DJH000=a.DJH000 and aa.BRID00=PBRID00
and aa.CXLSH0=LS_CXLSH0 and aa.DDLSH0=LS_DDLSH0 and aa.STATE='N'))
or (nvl(PZFHJJE,0)<=0 and 1=1)
);
--查询数据医保金额
begin
select sum(AMOUNT) into PYBHJJE from PAY_YJJ_MXCX where BRID00=PBRID00 and CXLSH0=LS_CXLSH0 and DDLSH0=LS_DDLSH0 and STATE='Y';
exception
when others then
PYBHJJE:=0;
end;
--1:出院结算 Y:婴儿拆分---end---
--1:出院结算 M:医保项目拆分---begin---
elsif PFYCFLX='M' then
--把数据插入到中间表-->非医保项目--费用
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_DDLSH0,LS_DDLSH0,D.DJH000,sum(A.HJJE00)HJJE00,D.BRID00,0,'0','N'
from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C,ZY_BRFY00 D,BM_YGBM00 E
where 1=1
and nvl(trim(d.YBFSDH),'0')='0'
and (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0)
and a.XMBH00 = C.SFXMID
and C.ZYFPID = B.FPXMID
and D.DJH000=a.DJH000
and a.KDYS00=e.YGBH00
and B.SFYLXM='Y'
and a.XMBH00<9999999900
and d.BRID00=PBRID00
and d.ZYID00=PZYID00
and a.JMBZ00<>'2'
and exists (
select 1 from BM_YBFPXM AA,VW_BM_YBSFDY CC,BM_YBSFXM DD
where AA.BH0000 = CC.YBZYFP
and AA.YBZXLB = CC.YBZXLB
and CC.YBBRLB = LS_YBBRLB
and CC.SFXMID = A.XMBH00
and CC.YBZXLB = DD.YBZXLB(+)
and CC.YBXMBH = DD.XMBH00(+)
and CC.SFYP00 = 'N'--是否药品,'0'费用,'1'零散处方,'2'医嘱处方
and AA.YBZXLB = LS_YBZXLB
and AA.SYBZ00 <> '1'
and nvl(CC.SFYBXM,'N')='N'
)
group by D.DJH000,D.BRID00;
--把数据插入到中间表-->非医保项目--药品
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_DDLSH0,LS_DDLSH0,D.DJH000,sum(round(a.LSDJ00*a.YPZSL0*100)/100)HJJE00,D.BRID00,0,'1','N'
from YF_ZYCFMX A,YF_ZYCF00 c,ZY_BRFY00 d,BM_YD0000 e
where 1=1
and nvl(trim(D.YBFSDH),'0')='0'
and (d.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or d.JZDH00+0=0)
and a.CFLSH0=c.CFLSH0
and c.DJH000=d.DJH000
and a.YPNM00=e.YPNM00
and d.BRID00=PBRID00
and d.ZYID00=PZYID00
and a.SFZBY0='N'--是否自备药
and exists (
select 1 from BM_YBFPXM AA,VW_BM_YBSFDY CC,BM_YBSFXM DD
where AA.BH0000 = CC.YBZYFP
and AA.YBZXLB = CC.YBZXLB
and CC.YBBRLB = LS_YBBRLB
and CC.SFXMID = a.YPNM00
and CC.YBZXLB = DD.YBZXLB(+)
and CC.YBXMBH = DD.XMBH00(+)
and CC.SFYP00 = 'Y'--是否药品,'0'费用,'1'零散处方,'2'医嘱处方
and AA.YBZXLB = LS_YBZXLB
and AA.SYBZ00 <> '1'
and nvl(CC.SFYBXM,'N')='N'
)
group by D.DJH000,D.BRID00;
--把数据插入到中间表-->非医保项目--药品
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_DDLSH0,LS_DDLSH0,b.DJH000,sum(round(a.LSDJ00*a.YPZSL0*100)/100)HJJE00,b.BRID00,0,'2','N'
from YF_YZYPSQ A,ZY_BRFY00 b,BM_YD0000 d,BM_YGBM00 E
where 1=1
and nvl(trim(b.YBFSDH),'0')='0'
and (b.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or b.JZDH00+0=0)
and a.DJH000=b.DJH000
and a.YPNM00=d.YPNM00
and a.YSGZH0=e.YGBH00
and b.BRID00=PBRID00
and b.ZYID00=PZYID00
and exists (
select 1 from BM_YBFPXM AA,VW_BM_YBSFDY CC,BM_YBSFXM DD
where AA.BH0000 = CC.YBZYFP
and AA.YBZXLB = CC.YBZXLB
and CC.YBBRLB = LS_YBBRLB
and CC.SFXMID = a.YPNM00
and CC.YBZXLB = DD.YBZXLB(+)
and CC.YBXMBH = DD.XMBH00(+)
and CC.SFYP00 = 'Y'--是否药品,'0'费用,'1'零散处方,'2'医嘱处方
and AA.YBZXLB = LS_YBZXLB
and AA.SYBZ00 <> '1'
and nvl(CC.SFYBXM,'N')='N'
)
group by b.DJH000,b.BRID00
;
--冲销的单据号
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_CXLSH0,LS_DDLSH0,a.DJH000,a.HJJE00,a.BRID00,0,'','N'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00
and a.BRID00=PBRID00
and a.CXDJH0<>0
and a.CXDJH0 in (select bb.DJH000 from PAY_YJJ_MXCX bb where bb.BRID00=PBRID00 and bb.CXLSH0=LS_CXLSH0 and bb.DDLSH0=LS_DDLSH0 and bb.STATE='N' )
and a.DJH000 not in (select bb.DJH000 from PAY_YJJ_MXCX bb where bb.BRID00=PBRID00 and bb.CXLSH0=LS_CXLSH0 and bb.DDLSH0=LS_DDLSH0 and bb.STATE='N')
;
--查询数据自费金额
begin
select sum(AMOUNT) into PZFHJJE from PAY_YJJ_MXCX where BRID00=PBRID00 and CXLSH0=LS_CXLSH0 and DDLSH0=LS_DDLSH0 and STATE='N';
exception
when others then
PZFHJJE:=0;
end;
if nvl(PZFHJJE,0)<=0 then
PZFHJJE:=0;
PFKLSH0:='';
return;
end if;
--把数据插入到中间表-->医保项目
insert into PAY_YJJ_MXCX(CXLSH0,DDLSH0,DJH000,AMOUNT,BRID00,JZDH00,TRADETYPE,STATE)
select LS_DDLSH0,LS_DDLSH0,a.DJH000,a.HJJE00,a.BRID00,0,'','Y'
from ZY_BRFY00 a where 1=1
and a.ZYID00=PZYID00 and a.BRID00=PBRID00
and (a.JZDH00 in (select k.JZDH00 from ZY_JZB000 k
where k.BRID00=PBRID00 and K.ZYID00=PZYID00 start with k.JZDH00=PJZDH00
connect by prior k.CXJZDH=k.JZDH00) or a.JZDH00+0=0)
and
(
( nvl(PZFHJJE,0)>0 and not exists (select 1 from PAY_YJJ_MXCX aa where aa.DJH000=a.DJH000 and aa.BRID00=PBRID00
and aa.CXLSH0=LS_CXLSH0 and aa.DDLSH0=LS_DDLSH0 and aa.STATE='N'))
or (nvl(PZFHJJE,0)<=0 and 1=1)
);
--查询数据医保金额
begin
select sum(AMOUNT) into PYBHJJE from PAY_YJJ_MXCX where BRID00=PBRID00 and CXLSH0=LS_CXLSH0 and DDLSH0=LS_DDLSH0 and STATE='Y';
exception
when others then
PYBHJJE:=0;
end;
end if;
--1:出院结算 M:医保项目拆分---end---
if PCOMMIT='Y' then
commit;
end if;
PZXZT00:='1';--执行状态 0:失败 1:成功
exception
when no_data_found then
PERRMSG:=substrb('执行过程SP_ZY_FYCFJS异常!错误原因:'||sqlerrm,1,200);
PZXZT00:='0';--执行状态 0:失败 1:成功
PERCODE:='no_data_found';
when others then
PERRMSG:=substrb('执行过程SP_ZY_FYCFJS异常!错误原因:'||sqlerrm,1,200);
PZXZT00:='0';--执行状态 0:失败 1:成功
PERCODE:='others';
end;
/
show error;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%